class Solution {
public:
    int lengthOfLIS(vector<int>& nums) {
        /*
        状态表示
        dp[i]表示以i位置为结尾的最长递增子序列长度

        注意
        以i位置为结尾的最长递增子序列不一定是以i位置为结尾的数组的最长递增子序列

        状态转移方程
        for j = 0 to i-1
            if nums[i] > nums[j]
               dp[i] = max(dp[j] + 1, dp[i]);

        */
        int n = nums.size();
        vector<int> dp(n, 1);
        int ret = 1;
        for (int i = 1; i < n; i++)
        {
            for (int j = 0; j < i; j++)
            {
                if (nums[i] > nums[j])
                    dp[i] = max(dp[j] + 1, dp[i]);
            }
            ret = max(ret, dp[i]);
        }
        return ret;
    }
};